#ifndef DECODEPACKET_H
#define DECODEPACKET_H

extern "C"{
#include <libavcodec/avcodec.h>
}
/**
 * @brief The DecodePacket class 解码
 */
class DecodePacket
{
public:
    DecodePacket();

public:
    bool isAudio = false;
    /**
     * @brief OpenDecoder 找到对应解码器，打开解码器上下文
     * @param params
     * @return
     */
    bool openDecoder(AVCodecParameters *params);
    /**
     * @brief sendToDecoder 发送到解码线程，不管成功与否都释放pkt空间（对象和媒体内容）
     * @param pkt
     * @return
     */
    bool sendToDecoder(AVPacket *pkt);
    /**
     * @brief receiveFrame
     *        获取解码数据，一次send可能需要多次Recv，获取缓冲中的数据Send NULL在Recv多次
     *        每次复制一份，由调用者释放 av_frame_free
     * @return
     */
    AVFrame* receiveFrame();

private:
    int audioIndex = -1;
    AVCodecContext* avCodecCtx = nullptr;

};

#endif // DECODEPACKET_H
